Complementary metal-oxide-semiconductor (CMOS) circuits are in widespread use today. Higher-performance systems require increased speed and current requirements for their output buffers. Higher current drive increases speed because load capacitances are more quickly charged or discharged. Unfortunately, unwanted noise often increases too.
CMOS chips with higher-drive output buffers often produce a type of noise known as ground bounce, due to rapid changes in current through the parasitic inductances of the integrated circuit (IC) package. These inductances resist changes in current by changing the voltages on power or ground supplies. Such voltage changes can falsely trigger logic within the IC device, or other devices in the system.
The rate of voltage change of the output, the edge rate, increases for these faster devices. The high edge rate can reflect off the ends of printed-circuit-board (PCB) wiring traces driven by the output buffer. These reflections produce voltage variations known as undershoot, overshoot, and ringing (oscillation). Careful layout of these wiring traces is needed to minimize trace-ends that can cause reflections. Termination devices such as resistors to ground at the ends of the traces are often used to absorb the reflect ion-causing wave front produced by the high edge rate.
FIG. 1 is a diagram of a waveform of a prior-art high-drive output buffer driving a PCB wiring trace. The high current drive of the output buffer produces a high edge rate that rapidly changes the output voltage from ground to the power-supply voltage, Vcc. The high edge rate produces a wave front that travels down the wiring trace and reflects off one or more ends. The reflected wave front then travels back up the wiring trace to the output buffer, and raises the voltage at the output buffer when the reflected wave arrives. The raised voltage is above Vcc and is known as an overshoot. This reflected wave then reverses direction and travels back to the end of the wiring trace, is reflected, and again reaches the output buffer, producing a series of both overshoots and undershoots, known as ringing. Since the reflected wave is dampened and loses energy at each reflection, the amplitude of the ringing gradually decreases. Low-going ringing (undershoot) is caused by a mis-match in impedance. Multiple reflections interfere with each other and cause the ringing.
When the output buffer switches from high to low, another high-edge rate wave travels down the wiring trace and is reflected back, producing undershoot and more ringing. This undershoot can cause ground bounce inside the output buffer's IC.
When the ringing and over/undershoot is large, logic can read a static signal as low when the static signal is actually high. For example, a static 3-volt signal input to another pin of the IC is a high signal, but when the internal ground of the IC bounces up from 0 volt to 2 volt, the static 3-volt signal appears to be a 1-volt signal, a low input. When the input signal is connected to a latch or flip-flop, the false low can be latched in, causing an error. Thus noise is a serious problem.
Several prior-art solutions to these problems are known. For example, Pierce et al., U.S. Pat. No. 5,319,252, assigned to Xilinx Inc. of San Jose, Calif., discloses an output buffer which gradually turns output buffers on and off so that there is no sharp discontinuity in the current flow. The output voltage is fed back to gradually turn off the output buffer at the end of the voltage transition. Lipp in U.S. Pat. No. 5,347,177, discloses a closed-loop trace which is driven by output buffers with level-sensitive impedance control.
While these methods are useful for controlling noise from a single output buffer, often many output buffers switch simultaneously. Simultaneous switching produces severe noise conditions and is often the worst-case. For example, if 6 of 8 outputs change at the same time, the noise from the 6 changing outputs may couple into the remaining 2 outputs, upsetting these outputs.
A solution to this problem is disclosed by Kwong et al. in U.S. Pat. No. 5,963,047, assigned to Pericom Semiconductor of San Jose, Calif. When one or more outputs change state, a short pulse is generated. The pulse is sent to other neighboring output buffers which may not be switching. The pulse temporarily disables the large drivers in these other buffers while the outputs change. Noise is reduced since the other outputs are disabled during the pulse. This solution is known as "neighbor sensing".
Schematic of Pulse-Disabled Output Buffer
FIG. 2 is a schematic diagram of a prior-art output buffer that disables the larger driver transistor using a pulse generator. The circuit diagrammed in FIG. 2 generates the waveform of FIG. 4 and was disclosed by Kwong et al. in U.S. Pat. No. 5,963,047.
An internal input signal DIN is buffered by inverter 54, which drives NOR gate 42 and NAND gate 40. An output enable OE signal is also input to NAND gate 40. Inverter 52 inverts OE for input to NOR gate 42. When OE is low, output buffer 30 is disabled and does not drive output pin 10.
NOR gate 42 drives n-channel pull-up transistor 32, which drives DOUT output pin 10 high when DIN is high and OE is high. Only one pull-up is provided because power-supply ringing is not as problematic as is ground bounce. However, two pull-down drivers are used: large driver transistor 36 and small driver transistor 34.
Output pin 10 is driven by the drain of large driver transistor 36 and by the drain of smaller driver transistor 34 through resistor 38. During and immediately after the later part of the voltage transition, when ringing occurs, large driver transistor 36 is disabled so that only small driver transistor 34 is enabled. Only small driver transistor 34 continues to drive the output low until ground is reached. Resistor 38 increases the output impedance, helping to absorb reflections.
Small driver transistor 34 thus acts as a dynamic driver transistor, being used during voltage slewing, while larger driver transistor 36 is used as a static driver to supply a large D.C. current sink after the output voltage has completed its swing.
The output from NAND gate 40 is inverted by inverter 44 and drives the gate of small driver transistor 34. The output of NAND gate 40 is also input to NOR gate 46, which drives the gate of large driver transistor 36.
Large driver transistor 36 is pulsed off by a pulse generated by input-transition detector 50. When input DIN changes from high to low, detector 50 generates a pulse DP. This pulse DP is a high-going pulse. The high-going DP pulse is input to NOR gate 46 and temporarily disabled large driver transistor 36.
Other neighboring output buffers (not shown) similar to output buffer 30 also receive the DP pulse from detector 50. These other output buffers also have large driver transistors that are pulsed off when DIN changes. The DIN inputs to these other output buffers are also received by detector 50. Any low-going transition of any DIN for any neighboring pin generates the DP pulse and disables large driver transistors for all neighboring outputs.
Resistor 38 is in series with the output and thus serves to increase the output impedance. The higher output impedance helps dampen reflected waves and reduce ringing. Resistor 38 is sized to provide a matching impedance to the characteristic impedance of the wiring trace attached to output pin 10.
Neighbor Sensing--FIG. 3
FIG. 3 illustrates a group of neighboring output buffers that generate disabling pulses for all outputs when any output is driven low. Each output pin is driven by its own output buffer 30, which includes pull-up transistor 32, resistor 38, and small driver transistor 34 as shown in detail in FIG. 2. Other components of FIG. 2 are deleted for clarity. Large driver transistors 36 and NOR gates 46 driving the gates of transistors 36 are shown separately from output buffers 30 to highlight their function.
The circuit of FIG. 3 detects when neighboring output buffers are switching and temporarily disables the large driver transistors of the output buffer. Although bounce in the noisy power and ground supplies can be coupled to output pin 10 through small driver transistors 34, the amount of coupling is smaller since these transistors are smaller than large driver transistors 36. Resistors 38 also significantly dampen any bounce on the supplies before reaching output pin 10.
Input-transition detector 50 receives inputs from each DIN input to each output buffer 30. When any of the inputs DIN-1, DIN-2, DIN-3 . . . DIN-N, for N neighboring outputs transitions from high to low, detector 50 generates a high-going DP pulse.
The high-going DP pulse generated from detector 50 is sent to all neighboring output buffers 30. NOR gates 46 then disable large driver transistors 36, preventing noise from coupling into output pin 10 from the noisy power and ground supplies.
Neighbor sensing allows any output that is switching and injecting noise into the power or ground supplies to disable other output buffers for a short time. The same pulse generator, detector 50, is used to generate a pulse for isolating its own drivers and the neighbor's drivers. All pin's drivers are disabled at about the same time as the switching pin's driver is disabled, since the same pulse DP is used. Thus the neighbor's drivers are isolated when the ringing occurs.
Timing of Disabling Neighbor's Drivers--FIG. 4
FIG. 4 is a waveform diagram illustrating how an output transition on one pin disables drivers for other pins that are not changing to prevent noise coupling between pins. When bit 3 of a data bus is to change from high to low, the DIN input to the bit-3 output buffer, DIN-3, is driven low. Detector 50 of FIGS. 2, 3 detects the low-going change on DIN-3 and generates a DP pulse. The bit-3 output buffer drives a high voltage onto the gate of the pull-down small driver transistor, causing the output, DOUT-3, to begin to drop in voltage.
The gate of the large driver transistor is also driven high initially, since the DP pulse takes longer to generate than the delay from DIN-3 to the gate of the large driver transistor. However, when the DP pulse is generated, the gate of the large driver transistor is driven low, disabling the large driver transistor. Thus the DP pulse disables the large driver transistor after the output DOUT-3 begins to slew, but before the output reaches ground and before the first reflection is returned.
The DP pulse generated by the DIN-3 input is also sent to all other pins in the neighbor group. As an example, bit 5 is also shown in FIG. 4. DIN-5 remains in a constant low state during this time, and the output DOUT-5 likewise remains at ground. However, some ground-bounce noise from the slewing output DOUT-3 is generated and coupled into DOUT-5. This noise coupled in appears as a slight waving of the voltage of DOUT-5 above and below absolute ground.
The DP pulse generated by DIN-3 switching is also sent to the output buffer driving DOUT-5. The large driver transistor for DOUT-5 is also disabled by the DP pulse, even though DOUT-5 is not switching. Disabling other, non-switching, outputs prevents more noise coupling from occurring.
While such neighbor sensing is useful, speed requirements can limit the number of output buffers that can be sensed together to perhaps only 4 neighboring pins. When large busses of 16 or more outputs are used, sensing only 4 of the 16 outputs reduces the effectiveness of the neighbor sensing. A faster sensing circuit is desired so that more outputs can be sensed together at a high speed. It is desired to sense at least 16 outputs together for neighbor sensing.
Often some control inputs other than the data inputs can affect the outputs. For example, an output-enable (OE) input may disable some or all of the outputs. When OE indicates that the outputs are disabled, neighbor sensing is not needed. Also, a latchenable (LE) signal may prevent changes in a data input from being immediately transmitted to an output. The neighbor-sensing pulse should be disabled when LE is in one state, but enabled for the other state of LE. Finally, the outputs may be latched by clocked flip-flop. Then changes in the data input do not affect the outputs until the next edge of the clock signal. When the clock transitions, all outputs may switch at the same time. Thus the clock edge should trigger a pulse to disable larger drivers in all outputs.
What is desired is an advanced neighbor sensing of many outputs. It is desired to sense changes on 16 neighboring outputs in a wide bus. It is further desired to enable and disable neighbor sensing as a logical function of control inputs such as latch-enable, output-enable, and clock signals. Faster neighbor sensing is desired.